#define BLINKER_WIFI // 以WiFi方式接入blinker
#include <Blinker.h>

char auth[] = "8843a85df717"; // 设备密钥
char ssid[] = "xlt"; // WiFi名称
char pswd[] = "12345678"; // WiFi密码

BlinkerNumber WATER("water"); // 新建组件对象
BlinkerText Fire("text-fire"); // 定义文本组件对象，键名为"text-fire"

float water_read = 0; // 定义浮点类型变量保存测量值


void heartbeat()
{
    WATER.print(water_read); // 在WATER组件中打印water_read的值
}

void setup()
{
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
    Blinker.begin(auth, ssid, pswd); // 初始化blinker
    Blinker.attachHeartbeat(heartbeat); // 心跳包函数

    // 初始化D1和D2引脚为输出模式
    pinMode(D1, OUTPUT);
    digitalWrite(D1, LOW);
    pinMode(D2, OUTPUT);
    digitalWrite(D2, LOW);

    // 初始化火焰传感器数字引脚为输入模式
    pinMode(D0, INPUT);
}

void fire()
{
    int sensorValue = analogRead(D4); // 读取模拟值
    int sensorState = digitalRead(D0); // 读取数字值
    Serial.print("Sensor Value: ");
    Serial.print(sensorValue); // 打印模拟值
    Serial.print(" | Sensor State: ");
    Serial.println(sensorState); // 打印数字值（0或1）
    delay(100); // 等待1秒

    if(sensorValue <= 800 || sensorState == LOW){ // 假设火焰传感器阈值为800
      Fire.print("有明火出现");
      digitalWrite(D2, HIGH); // 出现明火时，设置D2为高电平
      Fire.color("#F08080");
      delay(100);
  }
  else {
      Fire.print("没有明火出现");
      digitalWrite(D2, LOW); // 没有明火时，设置D2为低电平
      Fire.color("#90EE90");
      delay(100); 
  }

}


void loop()
{
    Blinker.run(); // Blinker运行

    water_read =(analogRead(A0)*100)/1024;//esp8266内置模拟-数字转换器启动测量

    if (isnan(water_read))
    {
        BLINKER_LOG("Failed to read from sensor!");
    }
    else
    {
        BLINKER_LOG("Water-Level: ", water_read, " %");

        if (water_read > 50.0)
        {
            digitalWrite(D1, HIGH);
        }
        else
        {
            digitalWrite(D1, LOW);
        }
    }

    fire();

    Blinker.delay(2000); // 等待2秒再次执行
}